home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Musik / Misc / Amster / Source / prefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-01  |  27.5 KB  |  910 lines

  1. /*
  2. ** Preferences
  3. */
  4.  
  5. #include "include/config.h"
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #include "include/mui.h"
  12. #include <mui/NListview_mcc.h>
  13. #include <libraries/asl.h>
  14.  
  15. #include "include/download.h"
  16. #include "include/gui.h"
  17. #include "include/search.h"
  18. #include "include/panel.h"
  19. #include "include/prefs.h"
  20. #include "include/share.h"
  21. #include "amster_Cat.h"
  22. #include "include/protos.h"
  23.  
  24. struct prefsdata myprefs;
  25. struct prefsdata *prf = &myprefs;
  26.  
  27. int prf_eventflags[] = { 2,0,2,2,2,2,2,1 };
  28.  
  29. static struct MUI_CustomClass *QueueClass;
  30.  
  31. MUIF QueueDispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg);
  32. ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg);
  33. void prf_set(struct prfdata *data);
  34. void prf_use(struct prfdata *data);
  35. void snd_play(char *fname);
  36. void prf_entry(struct prfdata *data);
  37.  
  38.  
  39. MUIF prf_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  40. {
  41.     struct prfdata *data = INST_DATA(cl,obj);
  42.  
  43.     switch(msg->MethodID) {
  44.         case OM_NEW:
  45.             return(prf_new(cl,obj,(APTR)msg));
  46.         case OM_DISPOSE:
  47.             if (QueueClass) MUI_DeleteCustomClass(QueueClass);
  48.             return(DoSuperMethodA(cl, obj, msg));
  49.         case PRF_UPDATE:
  50.             if(gui_napon) nap_sendbuf(NAPC_EMAILCHANGE,prf->email);
  51.             else MUI_Request(gui->app, gui->swin, 0L, (char *)MSG_ERROR_TITLE, (char *)MSG_OK_GAD, (char *)MSG_ERROR_UPDATEEMAIL);
  52.             return(NULL);
  53.         case PRF_OPEN:
  54.             prf_set(data);
  55.             set(obj,MUIA_Window_Open,TRUE);
  56.             return(NULL);
  57.         case PRF_USE:
  58.             prf_use(data);
  59.             set(obj,MUIA_Window_Open,FALSE);
  60.             return(NULL);
  61.         case PRF_LASTSAVED:
  62.             {
  63.             u_long tmp;
  64.             prf_setup(0, NULL);
  65.             if (prf_load("ENVARC:"AMSTER_PREFS)) {
  66.                 DoMethod(gui->searchpanel, SEARCH_SET);
  67.                 GetAttr(MUIA_Window_Open, obj, &tmp);
  68.                 if (tmp==TRUE) prf_set(data);
  69.             }
  70.             return(NULL);
  71.             }
  72.         case PRF_SAVE:
  73.             prf_use(data);
  74.             set(obj,MUIA_Window_Open,FALSE);
  75.             prf_save("ENVARC:"AMSTER_PREFS);
  76.             return(NULL);
  77.         case PRF_SAVEALL:
  78.             {
  79.             u_long tmp;
  80.             GetAttr(MUIA_Window_Open, obj, &tmp);
  81.             if (tmp==TRUE) {
  82.                 prf_use(data);
  83.             }
  84.             else prf_save("ENV:"AMSTER_PREFS);
  85.             prf_save("ENVARC:"AMSTER_PREFS);
  86.             return(NULL);
  87.             }
  88.         case PRF_CANCEL:
  89.             set(obj, MUIA_Window_Open, FALSE);
  90.             return(NULL);
  91.         case PRF_TESTSND:
  92.             {
  93.             u_long tmp;
  94.             GetAttr(MUIA_String_Acknowledge, data->EventSoundString, &tmp);
  95.             if (((char *)tmp)[0] != '\0') snd_play((char *)tmp);
  96.             return(NULL);
  97.             }
  98.         case PRF_FIREWALL:
  99.             {
  100.             u_long tmp;
  101.             GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
  102.             if(tmp==TRUE)
  103.                 set(data->PortString, MUIA_Disabled, TRUE);
  104.             else
  105.                 set(data->PortString, MUIA_Disabled, FALSE);
  106.  
  107.             return(NULL);
  108.             }
  109.         case PRF_ENTRY:
  110.             prf_entry(data);
  111.             return(NULL);
  112.         case PRF_VALIDDELAY:
  113.             {
  114.             u_long tmp;
  115.             GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
  116.             if ((int)tmp < 1) set(data->ST_QueueDelay, MUIA_String_Integer, prf->QueueDelay);
  117.             return NULL;
  118.             }
  119.     }
  120.     return(DoSuperMethodA(cl,obj,msg));
  121. }
  122.  
  123.  
  124. /*
  125. ** This is the Queue custom class, a sub class of Slider.mui. Overrides the
  126. ** MUIM_Numeric_Stringify method to implement custom display in slider gadget.
  127. */
  128.  
  129. MUIF QueueDispatcher(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  130. {
  131.     if (msg->MethodID==MUIM_Numeric_Stringify)
  132.     {
  133.         struct QueueData *data = INST_DATA(cl,obj);
  134.         struct MUIP_Numeric_Stringify *m = (APTR)msg;
  135.  
  136.         if (m->value<26)
  137.         {
  138.             sprintf(data->buf,"%3ld", m->value);
  139.         }
  140.         else
  141.         {
  142.             strcpy(data->buf, MSG_PRF_QUEUE_UNLIMITED);
  143.         }
  144.         return((ULONG)data->buf);
  145.     }
  146.     return(DoSuperMethodA(cl,obj,msg));
  147. }
  148.  
  149.  
  150. ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg)
  151. {
  152.     static char *pages[] = {
  153.         (char *)_MSG_PRF_USER_TAB,
  154.         (char *)_MSG_PRF_OPTIONS_TAB,
  155.         (char *)_MSG_PRF_EVENTS_TAB,
  156.         (char *)_MSG_PRF_ADVANCED_TAB,
  157.         NULL
  158.     };
  159.     static char *events[] = {
  160.         (char *)_MSG_PRF_EVT_START,
  161.         (char *)_MSG_PRF_EVT_EXIT,
  162.         (char *)_MSG_PRF_EVT_CONN,
  163.         (char *)_MSG_PRF_EVT_DISC,
  164.         (char *)_MSG_PRF_EVT_DLFIN,
  165.         (char *)_MSG_PRF_EVT_ULFIN,
  166.         (char *)_MSG_PRF_EVT_DLERR,
  167.         (char *)_MSG_PRF_EVT_PLAY,
  168.         NULL
  169.     };
  170.     static char *lamps[] = {
  171.         (char *)_MSG_PRF_LAMPLAMP,
  172.         (char *)_MSG_PRF_LAMPTWF,
  173.         NULL
  174.     };
  175.     static char *ServerListOpts[] = {
  176.         (char *)_MSG_PRF_SERVERLIST_FORGET,
  177.         (char *)_MSG_PRF_SERVERLIST_SAVE,
  178.         (char *)_MSG_PRF_SERVERLIST_CACHE,
  179.         NULL
  180.     };
  181.  
  182.     struct prfdata *data;
  183.     Object *UserString, *PasswordString, *EMailString, *EMailButton, *DownloadPathString, *LinkSpeedCycle;
  184.     Object *ClearListToggle, *AutoConnectToggle, *AskFileToggle, *AutoSaveToggle, *AutoAddToggle, *AutoCleanupToggle;
  185.     Object *LampCycle, *CY_ServerList, *ST_NameLength;
  186.     Object *EventList, *EventScriptString, *EventSoundString, *EventTestButton;
  187.     Object *MetaServerString, *ServerString, *PortString, *FirewallToggle;
  188. /*    Object *VersionString;*/
  189.     Object *DownloadQueueSlider, *UploadQueueSlider, *DownloadPriSlider, *UploadPriSlider;
  190.     Object *ST_QueueRetries, *ST_QueueDelay;
  191.     Object *SaveButton, *UseButton, *CancelButton;
  192.  
  193.     QueueClass = MUI_CreateCustomClass(NULL, MUIC_Slider, NULL, sizeof(struct QueueData), QueueDispatcher);
  194.  
  195.     if(pages[0] == (char *)_MSG_PRF_USER_TAB)
  196.         localize_array(pages);
  197.     if(events[0] == (char *)_MSG_PRF_EVT_START)
  198.         localize_array(events);
  199.     if(lamps[0] == (char *)_MSG_PRF_LAMPLAMP)
  200.         localize_array(lamps);
  201.     if(ServerListOpts[0] == (char *)_MSG_PRF_SERVERLIST_FORGET)
  202.         localize_array(ServerListOpts);
  203.  
  204.     if (obj = (Object *)DoSuperNew(cl, obj,
  205.         MUIA_HelpNode, "config",
  206.         MUIA_Window_Title, MSG_PRF_TITLE,
  207.         MUIA_Window_ID, MAKE_ID('S','E','T','T'),
  208.         WindowContents, VGroup,
  209.             Child, RegisterGroup(pages),
  210.             Child, VGroup,
  211.                 Child, ColGroup(2), GroupFrameT(MSG_PRF_ACCOUNT_FRAME),
  212.                     MUIA_HelpNode, "conf-user",
  213.                     Child, Label2(MSG_PRF_USERNAME),
  214.                     Child, UserString = StringObject,
  215.                         StringFrame,
  216.                         MUIA_String_AdvanceOnCR, TRUE,
  217.                         MUIA_CycleChain, 1,
  218.                         MUIA_ShortHelp, MSG_PRF_USERNAME_HELP,
  219.                     End,
  220.                     Child, Label2(MSG_PRF_PASSWORD),
  221.                     Child, PasswordString = StringObject,
  222.                         StringFrame,
  223.                         MUIA_String_AdvanceOnCR, TRUE,
  224.                         MUIA_String_Secret, TRUE,
  225.                         MUIA_CycleChain, 1,
  226.                         MUIA_ShortHelp, MSG_PRF_PASSWORD_HELP,
  227.                     End,
  228.                     Child, Label2(MSG_PRF_EMAIL),
  229.                     Child, HGroup,
  230.                         Child, EMailString = StringObject,
  231.                             StringFrame,
  232.                             MUIA_HorizWeight, 150,
  233.                             MUIA_String_AdvanceOnCR, TRUE,
  234.                             MUIA_CycleChain, 1,
  235.                             MUIA_ShortHelp, MSG_PRF_EMAIL_HELP,
  236.                         End,
  237.                         Child, EMailButton = SimpleButton(MSG_PRF_UPDATE_GAD),
  238.                             MUIA_ShortHelp, MSG_PRF_UPDATE_HELP,
  239.                     End,
  240.                     Child, Label2(MSG_PRF_CONNECTION),
  241.                     Child, LinkSpeedCycle = CycleObject,
  242.                         MUIA_Cycle_Active, prf->link,
  243.                         MUIA_Cycle_Entries, nap_linktype,
  244.                         MUIA_ShortHelp, MSG_PRF_CONNECTION_HELP,
  245.                     End,
  246.                 End,
  247.                 Child, ColGroup(2),
  248.                     Child, Label2(MSG_PRF_DLPATH),
  249.                     Child, HGroup,
  250.                         Child, DownloadPathString = PopaslObject,
  251.                             MUIA_Popstring_String, StringObject,
  252.                                 StringFrame,
  253.                                 MUIA_String_MaxLen, 256,
  254.                                 MUIA_CycleChain, 1,
  255.                                 MUIA_ShortHelp, MSG_PRF_DLPATH_HELP,
  256.                             End,
  257.                             MUIA_Popstring_Button, PopButton(MUII_PopFile),
  258.                             MUIA_Popasl_Type, ASL_FileRequest,
  259.                             ASLFR_TitleText, MSG_PRF_DLPATH_REQ,
  260.                             ASLFR_DrawersOnly, TRUE,
  261.                         End,
  262.                         Child, Label2(MSG_PRF_NAMELENGTH),
  263.                         Child, ST_NameLength = StringObject,
  264.                             StringFrame,
  265.                             MUIA_HorizWeight, 25,
  266.                             MUIA_String_Integer, prf->NameLength,
  267.                             MUIA_String_Accept, "0123456789",
  268.                             MUIA_String_MaxLen, 4,
  269.                             MUIA_CycleChain, 1,
  270.                             MUIA_ShortHelp, MSG_PRF_NAMELENGTH_HELP,
  271.                         End,
  272.                     End,
  273.                 End,
  274.             End,
  275.             Child, VGroup,
  276.                 MUIA_HelpNode, "conf-opts",
  277.                 Child, VGroup, GroupFrameT(MSG_PRF_MISC_FRAME),
  278.                     Child, maketoggle(MSG_PRF_AUTOCONNECT,  &AutoConnectToggle),
  279.                     Child, maketoggle(MSG_PRF_CLEARLIST,    &ClearListToggle  ),
  280.                     Child, maketoggle(MSG_PRF_ALWAYSASK,    &AskFileToggle    ),
  281.                     Child, maketoggle(MSG_PRF_ADDTOLIBRARY, &AutoAddToggle    ),
  282.                     Child, maketoggle(MSG_PRF_AUTOSAVELIB,  &AutoSaveToggle   ),
  283.                     Child, maketoggle(MSG_PRF_AUTOCLEANUP,  &AutoCleanupToggle),
  284.                 End,
  285.                 Child, ColGroup(2),
  286.                     Child, Label2(MSG_PRF_SERVERLIST),
  287.                     Child, CY_ServerList = CycleObject,
  288.                         MUIA_Cycle_Active, prf->ServerList,
  289.                         MUIA_Cycle_Entries, ServerListOpts,
  290.                         MUIA_ShortHelp, MSG_PRF_SERVERLIST_HELP,
  291.                     End,
  292.                     Child, Label2(MSG_PRF_LAMPCLASS),
  293.                     Child, LampCycle = CycleObject,
  294.                         MUIA_Cycle_Active, prf->lamps,
  295.                         MUIA_Cycle_Entries, lamps,
  296.                         MUIA_ShortHelp, MSG_PRF_LAMPCLASS_HELP,
  297.                     End,
  298.                 End,
  299.             End,
  300.             Child, VGroup,
  301.                 MUIA_HelpNode, "conf-events",
  302.                 Child, NListviewObject,
  303.                     MUIA_NListview_NList, EventList = NListObject,
  304.                         InputListFrame,
  305.                         MUIA_NList_SourceArray, events,
  306.                     End,
  307.                 End,
  308.                 Child, ColGroup(2),
  309.                     Child, Label2(MSG_PRF_COMMAND),
  310.                     Child, EventScriptString = PopaslObject,
  311.                         MUIA_Popstring_String, StringObject,
  312.                             StringFrame,
  313.                             MUIA_String_MaxLen, 256,
  314.                             MUIA_CycleChain, 1,
  315.                             MUIA_ShortHelp, MSG_PRF_COMMAND_HELP,
  316.                         End,
  317.                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  318.                         MUIA_Popasl_Type, ASL_FileRequest,
  319.                         ASLFR_TitleText, MSG_PRF_SCRIPT_REQ,
  320.                     End,
  321.                     Child, Label2(MSG_PRF_SOUND),
  322.                     Child, HGroup,
  323.                         Child, EventSoundString = PopaslObject,
  324.                             MUIA_HorizWeight, 300,
  325.                             MUIA_Popstring_String, StringObject,
  326.                                 StringFrame,
  327.                                 MUIA_String_MaxLen, 256,
  328.                                 MUIA_CycleChain, 1,
  329.                             End,
  330.                             MUIA_Popstring_Button, PopButton(MUII_PopFile),
  331.                             MUIA_Popasl_Type, ASL_FileRequest,
  332.                             ASLFR_TitleText, MSG_PRF_SOUND_REQ,
  333.                         End,
  334.                         Child, EventTestButton = SimpleButton(MSG_PRF_SOUNDTEST_GAD),
  335.                     End,
  336.                 End,
  337.             End,
  338.             Child, VGroup,
  339.                 Child, VGroup, GroupFrameT(MSG_PRF_NETWORK_FRAME),
  340.                     Child, ColGroup(2),
  341.                         MUIA_HelpNode, "conf-adv",
  342.                         Child, Label2(MSG_PRF_MAINSERVER),
  343.                         Child, MetaServerString = StringObject,
  344.                             StringFrame,
  345.                             MUIA_String_AdvanceOnCR, TRUE,
  346.                             MUIA_CycleChain, 1,
  347.                             MUIA_ShortHelp, MSG_PRF_MAINSERVER_HELP,
  348.                         End,
  349.                         Child, Label2(MSG_PRF_MP3SERVER),
  350.                         Child, ServerString = StringObject,
  351.                             StringFrame,
  352.                             MUIA_String_AdvanceOnCR, TRUE,
  353.                             MUIA_CycleChain, 1,
  354.                             MUIA_ShortHelp, MSG_PRF_MP3SERVER_HELP,
  355.                         End,
  356. /*
  357.                         Child, Label2(MSG_PRF_VERSION),
  358.                         Child, VersionString = StringObject,
  359.                             StringFrame,
  360.                             MUIA_CycleChain, 1,
  361.                         End,
  362. */
  363.                         Child, Label2(MSG_PRF_LISTENPORT),
  364.                         Child, HGroup,
  365.                             Child, PortString = StringObject,
  366.                                 StringFrame,
  367.                                 MUIA_HorizWeight, 90,
  368.                                 MUIA_String_Integer, prf->port,
  369.                                 MUIA_String_Accept, "0123456789",
  370.                                 MUIA_String_MaxLen, 6,
  371.                                 MUIA_CycleChain, 1,
  372.                                 MUIA_ShortHelp, MSG_PRF_LISTENPORT_HELP,
  373.                             End,
  374.                             Child, Label2(MSG_PRF_BEHINDFW),
  375.                             Child, FirewallToggle = ImageObject,
  376.                                 ButtonFrame,
  377.                                 MUIA_HorizWeight, 10,
  378.                                 MUIA_Background, MUII_ButtonBack,
  379.                                 MUIA_InputMode, MUIV_InputMode_Toggle,
  380.                                 MUIA_ShowSelState, FALSE,
  381.                                 MUIA_Image_Spec, "6:15",
  382.                                 MUIA_Selected, FALSE,
  383.                                 MUIA_ShortHelp, MSG_PRF_BEHINDFW_HELP,
  384.                             End,
  385.                         End,
  386.                     End,
  387.                 End,
  388.                 Child, VGroup, GroupFrameT(MSG_PRF_TRANSFER_FRAME),
  389.                     Child, ColGroup(4),
  390.                         Child, Label2(MSG_PRF_DLQUEUE),
  391.                         Child, DownloadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
  392.                             MUIA_Slider_Min, 1,
  393.                             MUIA_Slider_Max, 26,
  394.                             MUIA_Numeric_Value, 26,
  395.                             MUIA_CycleChain, 1,
  396.                             MUIA_ShortHelp, MSG_PRF_DLQUEUE_HELP,
  397.                             TAG_DONE),
  398.                         Child, Label2(MSG_PRF_TASKPRI),
  399.                         Child, DownloadPriSlider = NumericbuttonObject,
  400.                             MUIA_Numeric_Min, -128,
  401.                             MUIA_Numeric_Max, 0,
  402.                             MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
  403.                         End,
  404.                         Child, Label2(MSG_PRF_ULQUEUE),
  405.                         Child, UploadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
  406.                             MUIA_Slider_Min, 0,
  407.                             MUIA_Slider_Max, 26,
  408.                             MUIA_Numeric_Value, 5,
  409.                             MUIA_CycleChain, 1,
  410.                             MUIA_ShortHelp, MSG_PRF_ULQUEUE_HELP,
  411.                             TAG_DONE),
  412.                         Child, Label2(MSG_PRF_TASKPRI),
  413.                         Child, UploadPriSlider = NumericbuttonObject,
  414.                             MUIA_Numeric_Min, -128,
  415.                             MUIA_Numeric_Max, 0,
  416.                             MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
  417.                         End,
  418.                     End,
  419.                     Child, HGroup,
  420.                         Child, Label2(MSG_PRF_RETRIES),
  421.                         Child, ST_QueueRetries = StringObject,
  422.                             StringFrame,
  423.                             MUIA_String_Integer, prf->QueueRetries,
  424.                             MUIA_String_Accept, "0123456789",
  425.                             MUIA_String_MaxLen, 6,
  426.                             MUIA_CycleChain, 1,
  427.                             MUIA_ShortHelp, MSG_PRF_RETRIES_HELP,
  428.                         End,
  429.                         Child, Label2(MSG_PRF_RETRYDELAY),
  430.                         Child, ST_QueueDelay = StringObject,
  431.                             StringFrame,
  432.                             MUIA_String_Integer, prf->QueueDelay,
  433.                             MUIA_String_Accept, "0123456789",
  434.                             MUIA_String_MaxLen, 6,
  435.                             MUIA_CycleChain, 1,
  436.                             MUIA_ShortHelp, MSG_PRF_RETRYDELAY_HELP,
  437.                         End,
  438.                     End,
  439.                 End,
  440.             End,
  441.             End,
  442.             Child, HGroup,
  443.                 Child, SaveButton   = SimpleButton(MSG_PRF_SAVE_GAD  ),
  444.                 Child, UseButton    = SimpleButton(MSG_PRF_USE_GAD   ),
  445.                 Child, CancelButton = SimpleButton(MSG_PRF_CANCEL_GAD),
  446.             End,
  447.  
  448.         End,
  449.         TAG_MORE, msg->ops_AttrList))
  450.     {
  451.         data = INST_DATA(cl,obj);
  452.  
  453.         data->UserString          = UserString;
  454.         data->PasswordString      = PasswordString;
  455.         data->EMailString         = EMailString;
  456.         data->DownloadPathString  = DownloadPathString;
  457.         data->LinkSpeedCycle      = LinkSpeedCycle;
  458.  
  459.         data->ClearListToggle     = ClearListToggle;
  460.         data->AutoConnectToggle   = AutoConnectToggle;
  461.         data->AskFileToggle       = AskFileToggle;
  462.         data->AutoSaveToggle      = AutoSaveToggle;
  463.         data->AutoAddToggle       = AutoAddToggle;
  464.         data->AutoCleanupToggle   = AutoCleanupToggle;
  465.         data->LampCycle           = LampCycle;
  466.         data->CY_ServerList       = CY_ServerList;
  467.         data->ST_NameLength       = ST_NameLength;
  468.  
  469.         data->EventList           = EventList;
  470.         data->EventScriptString   = EventScriptString;
  471.         data->EventSoundString    = EventSoundString;
  472.  
  473.         data->MetaServerString    = MetaServerString;
  474.         data->ServerString        = ServerString;
  475. /*        data->VersionString       = VersionString;*/
  476.         data->PortString          = PortString;
  477.         data->FirewallToggle      = FirewallToggle;
  478.         data->DownloadQueueSlider = DownloadQueueSlider;
  479.         data->DownloadPriSlider   = DownloadPriSlider;
  480.         data->UploadQueueSlider   = UploadQueueSlider;
  481.         data->UploadPriSlider     = UploadPriSlider;
  482.         data->ST_QueueRetries     = ST_QueueRetries;
  483.         data->ST_QueueDelay       = ST_QueueDelay;
  484.  
  485.         data->lastitem = -1;
  486.  
  487.         DoMethod(EMailButton,     MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_UPDATE);
  488.         DoMethod(EventList,       MUIM_Notify, MUIA_NList_EntryClick, MUIV_EveryTime, obj, 1, PRF_ENTRY);
  489.         DoMethod(EventTestButton, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_TESTSND);
  490.         DoMethod(FirewallToggle,  MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, PRF_FIREWALL);
  491.  
  492.         DoMethod(ST_QueueDelay,   MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 1, PRF_VALIDDELAY);
  493.  
  494.         DoMethod(SaveButton,     MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_SAVE  );
  495.         DoMethod(UseButton,      MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_USE   );
  496.         DoMethod(CancelButton,   MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
  497.  
  498.         DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
  499.  
  500.         return((ULONG)obj);
  501.     }
  502.     return(0);
  503. }
  504.  
  505.  
  506. void prf_set(struct prfdata *data)
  507. {
  508.     set(data->UserString,         MUIA_String_Contents, prf->user);
  509.     set(data->PasswordString,     MUIA_String_Contents, prf->pass);
  510.     set(data->EMailString,        MUIA_String_Contents, prf->email);
  511.     set(data->DownloadPathString, MUIA_String_Contents, prf->dlpath);
  512.     set(data->LinkSpeedCycle,     MUIA_Cycle_Active,    prf->link);
  513.  
  514.     set(data->ClearListToggle,   MUIA_Selected,       prf->clrlist);
  515.     set(data->AutoConnectToggle, MUIA_Selected,       prf->autocon);
  516.     set(data->AskFileToggle,     MUIA_Selected,       prf->askfile);
  517.     set(data->AutoAddToggle,     MUIA_Selected,       prf->autoadd);
  518.     set(data->AutoSaveToggle,    MUIA_Selected,       prf->autosave);
  519.     set(data->AutoCleanupToggle, MUIA_Selected,       prf->AutoCleanup);
  520.     set(data->LampCycle,         MUIA_Cycle_Active,   prf->lamps);
  521.     set(data->CY_ServerList,     MUIA_Cycle_Active,   prf->ServerList);
  522.     set(data->ST_NameLength,     MUIA_String_Integer, prf->NameLength);
  523.  
  524.     set(data->MetaServerString, MUIA_String_Contents, prf->mainserver);
  525.     set(data->ServerString,     MUIA_String_Contents, prf->server);
  526. /*    set(data->VersionString,    MUIA_String_Contents, prf->napvers);*/
  527.     set(data->PortString, MUIA_String_Integer, prf->port);
  528.     if (prf->port)
  529.         set(data->FirewallToggle, MUIA_Selected, FALSE);
  530.     else {
  531.         set(data->FirewallToggle, MUIA_Selected, TRUE);
  532.         set(data->PortString, MUIA_String_Integer, PRF_DEFAULT_PORT);
  533.     }
  534.     set(data->DownloadQueueSlider, MUIA_Numeric_Value,  prf->DownloadQueueLimit);
  535.     set(data->DownloadPriSlider,   MUIA_Numeric_Value,  prf->DownloadTaskPri   );
  536.     set(data->UploadQueueSlider,   MUIA_Numeric_Value,  prf->UploadQueueLimit  );
  537.     set(data->UploadPriSlider,     MUIA_Numeric_Value,  prf->UploadTaskPri     );
  538.     set(data->ST_QueueRetries,     MUIA_String_Integer, prf->QueueRetries      );
  539.     set(data->ST_QueueDelay,       MUIA_String_Integer, prf->QueueDelay        );
  540. }
  541.  
  542.  
  543. void prf_use(struct prfdata *data)
  544. {
  545.     u_long tmp, tmp2;
  546.  
  547.     /* Advanced */
  548.  
  549.     GetAttr(MUIA_String_Acknowledge, data->MetaServerString, &tmp);
  550.     if (((char*)tmp)[0]==0) prf->mainserver=NULL; else prf->mainserver=strdup((char*)tmp);
  551.  
  552.     GetAttr(MUIA_String_Acknowledge, data->ServerString, &tmp);
  553.     if (((char*)tmp)[0]==0) prf->server=NULL; else prf->server=strdup((char*)tmp);
  554.  
  555. /*
  556.     GetAttr(MUIA_String_Acknowledge, data->VersionString, &tmp);
  557.     if (((char*)tmp)[0]==0) prf->napvers=NULL; else prf->napvers=strdup((char*)tmp);
  558. */
  559.  
  560.     GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
  561.     if (!tmp) {
  562.         GetAttr(MUIA_String_Integer, data->PortString, &tmp);
  563.         prf->port = (int)tmp;
  564.     }
  565.     else prf->port = 0;
  566.  
  567.     GetAttr(MUIA_Numeric_Value, data->DownloadQueueSlider, &tmp);
  568.     if (tmp > prf->DownloadQueueLimit) {
  569.         /* Limit was raised, so we check the queue right away */
  570.         prf->DownloadQueueLimit = tmp;
  571.         DoMethod(gui->dwin, DL_CHECKQUEUE);
  572.     }
  573.     else prf->DownloadQueueLimit = tmp;
  574.  
  575.     GetAttr(MUIA_Numeric_Value, data->DownloadPriSlider, &tmp);
  576.     prf->DownloadTaskPri = tmp;
  577.  
  578.     GetAttr(MUIA_Numeric_Value, data->UploadQueueSlider, &tmp);
  579.     prf->UploadQueueLimit = tmp;
  580.  
  581.     GetAttr(MUIA_Numeric_Value, data->UploadPriSlider, &tmp);
  582.     prf->UploadTaskPri = tmp;
  583.  
  584.     GetAttr(MUIA_String_Integer, data->ST_QueueRetries, &tmp);
  585.     prf->QueueRetries = (int)tmp;
  586.  
  587.     GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
  588.     if ((int)tmp > 0) {
  589.         prf->QueueDelay = (int)tmp;
  590.         DoMethod(gui->dwin, DL_SETDELAY, prf->QueueDelay);
  591.     }
  592.  
  593.     /* User */
  594.  
  595.     GetAttr(MUIA_String_Acknowledge, data->UserString, &tmp);
  596.     if (((char*)tmp)[0]==0) prf->user=NULL; else prf->user=strdup((char*)tmp);
  597.  
  598.     GetAttr(MUIA_String_Acknowledge, data->PasswordString, &tmp);
  599.     if (((char*)tmp)[0]==0) prf->pass=NULL; else prf->pass=strdup((char*)tmp);
  600.  
  601.     GetAttr(MUIA_String_Acknowledge, data->EMailString, &tmp);
  602.     if (((char*)tmp)[0]==0) prf->email=NULL; else prf->email=strdup((char*)tmp);
  603.  
  604.     GetAttr(MUIA_String_Acknowledge, data->DownloadPathString, &tmp);
  605.     if (((char *)tmp)[0] == 0) prf->dlpath=NULL;
  606.     else {
  607.         prf->dlpath=strdup((char*)tmp);
  608.         DoMethod(gui->shwin, SHARE_SETDIR, prf->dlpath);
  609.     }
  610.  
  611.     /* Options */
  612.  
  613.     GetAttr(MUIA_Cycle_Active, data->LinkSpeedCycle, &tmp);
  614.     prf->link = tmp;
  615.  
  616.     GetAttr(MUIA_Selected, data->ClearListToggle, &tmp);
  617.     prf->clrlist = tmp;
  618.  
  619.     GetAttr(MUIA_Selected, data->AutoConnectToggle, &tmp);
  620.     prf->autocon = tmp;
  621.  
  622.     GetAttr(MUIA_Selected, data->AskFileToggle, &tmp);
  623.     prf->askfile = tmp;
  624.  
  625.     GetAttr(MUIA_Selected, data->AutoAddToggle, &tmp);
  626.     prf->autoadd = tmp;
  627.  
  628.     GetAttr(MUIA_Selected, data->AutoSaveToggle, &tmp);
  629.     prf->autosave = tmp;
  630.  
  631.     GetAttr(MUIA_Selected, data->AutoCleanupToggle, &tmp);
  632.     prf->AutoCleanup = tmp;
  633.  
  634.     GetAttr(MUIA_Cycle_Active, data->LampCycle, &tmp);
  635.     prf->lamps = tmp;
  636.  
  637.     GetAttr(MUIA_Cycle_Active, data->CY_ServerList, &tmp);
  638.     prf->ServerList = tmp;
  639.  
  640.     GetAttr(MUIA_String_Integer, data->ST_NameLength, &tmp);
  641.     if ((int)tmp > 7 && (int)tmp < 108) prf->NameLength = (int)tmp;
  642.  
  643.     /* Events */
  644.  
  645.     GetAttr(MUIA_NList_Active, data->EventList, &tmp);
  646.     if (tmp != MUIV_NList_Active_Off) {
  647.         if (prf_eventflags[tmp]&1) {
  648.             GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
  649.             if (((char*)tmp2)[0]==0) prf->scripts[tmp]=NULL;
  650.             else prf->scripts[tmp]=strdup((char*)tmp2);
  651.         }
  652.         if (prf_eventflags[tmp]&2) {
  653.             GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
  654.             if (((char*)tmp2)[0]==0) prf->sounds[tmp]=NULL;
  655.             else prf->sounds[tmp]=strdup((char*)tmp2);
  656.         }
  657.     }
  658.  
  659.     prf_save("ENV:"AMSTER_PREFS);
  660. }
  661.  
  662.  
  663. void prf_setup(int argc, char *argv[])
  664. {
  665.     memset(prf,0,sizeof(struct prefsdata));
  666.  
  667.     /* defaults */
  668.     prf->mainserver = "server.napster.com:8875";
  669.     prf->napvers = "Amster "AMSTER_VERSION;
  670.     prf->port = PRF_DEFAULT_PORT;
  671.     prf->email = "anon@napster.com";
  672.     prf->dlpath = "SYS:";
  673.     prf->link = 0;
  674.     prf->NameLength = 107;
  675.     prf->DownloadQueueLimit = 26;
  676.     prf->UploadQueueLimit = 2;
  677.     prf->UploadTaskPri = -1;
  678.     prf->QueueRetries = 180;
  679.     prf->QueueDelay = 20;
  680.     prf->regflag = 1;    /*  >:)  */
  681. }
  682.  
  683.  
  684. BOOL prf_load(char *fname)
  685. {
  686.     FILE *f;
  687.     char tmp[100], *s, *c;
  688.     int i;
  689.     u_long t;
  690.  
  691.     f=fopen(fname,"r");
  692.     if(f==0) return FALSE;
  693.  
  694.     while (fgets(tmp, sizeof(tmp), f)) {
  695.         s = strtok(tmp," ");
  696.         if(!s) {
  697.             continue;
  698.         }
  699.         else if (strcmp(s, "<search>")==0) {
  700.             while(fgets(tmp, sizeof(tmp), f)) {
  701.                 s = &tmp[0];
  702.                 c = nap_token(&s);
  703.                 if(!c) continue;
  704.                 else if(strcmp(c,"</search>")==0) break;
  705.                 else if(strcmp(c,"max")==0) {
  706.                     t = nap_ltoken(&s);
  707.                     if(t>2 && t<1000) prf->max = t;
  708.                 }
  709.                 else if(strcmp(c,"advopts")==0) {
  710.                     prf->speedqual   = nap_ltoken(&s);
  711.                     prf->speedval    = nap_ltoken(&s);
  712.                     prf->bitratequal = nap_ltoken(&s);
  713.                     prf->bitrateval  = nap_ltoken(&s);
  714.                     prf->freqqual    = nap_ltoken(&s);
  715.                     prf->freqval     = nap_ltoken(&s);
  716.                 }
  717.             }
  718.         } else if(strcmp(s,"noiconpanel")==0) {
  719.             prf->noiconpanel = 1;
  720.         } else if(strcmp(s,"mainserver")==0) {
  721.             if(s=strtok(NULL,"\n")) prf->mainserver=strdup(s);
  722.         } else if(strcmp(s,"server")==0) {
  723.             if(s=strtok(NULL,"\n")) prf->server=strdup(s);
  724. /*
  725.         } else if(strcmp(s,"napvers")==0) {
  726.             if(s=strtok(NULL,"\n")) prf->napvers=strdup(s);
  727. */
  728.         } else if(strcmp(s,"listport")==0) {
  729.             if(s=strtok(NULL,"\n")) prf->port = atoi(s);
  730.         } else if(strcmp(s,"downloadqueue")==0) {
  731.             if(s=strtok(NULL,"\n")) prf->DownloadQueueLimit = atoi(s);
  732.         } else if(strcmp(s,"downloadpriority")==0) {
  733.             if(s=strtok(NULL,"\n")) prf->DownloadTaskPri = atoi(s);
  734.         } else if(strcmp(s,"uploadqueue")==0) {
  735.             if(s=strtok(NULL,"\n")) prf->UploadQueueLimit = atoi(s);
  736.         } else if(strcmp(s,"uploadpriority")==0) {
  737.             if(s=strtok(NULL,"\n")) prf->UploadTaskPri = atoi(s);
  738.         } else if(strcmp(s,"queueretries")==0) {
  739.             if(s=strtok(NULL,"\n")) prf->QueueRetries = atoi(s);
  740.         } else if(strcmp(s,"queuedelay")==0) {
  741.             if(s=strtok(NULL,"\n")) {
  742.                 t = atoi(s);
  743.                 if (t > 0) prf->QueueDelay = t;
  744.             }
  745.  
  746.         } else if(strcmp(s,"script")==0) {
  747.             if(s=strtok(NULL," ")) {
  748.                 i = atoi(s);
  749.                 if(i>0 && i<9 && (s=strtok(NULL,"\n")))
  750.                     prf->scripts[i-1] = strdup(s);
  751.             }
  752.  
  753.         } else if(strcmp(s,"sound")==0) {
  754.             if(s=strtok(NULL," ")) {
  755.                 i = atoi(s);
  756.                 if(i>0 && i<8 && (s=strtok(NULL,"\n")))
  757.                     prf->sounds[i-1] = strdup(s);
  758.             }
  759.  
  760.         } else if(strcmp(s,"user")==0) {
  761.             if(s=strtok(NULL,"\n")) prf->user=strdup(s);
  762.         } else if(strcmp(s,"pass")==0) {
  763.             if(s=strtok(NULL,"\n")) prf->pass=strdup(s);
  764.         } else if(strcmp(s,"email")==0) {
  765.             if(s=strtok(NULL,"\n")) prf->email=strdup(s);
  766.         } else if(strcmp(s,"dlpath")==0) {
  767.             if(s=strtok(NULL,"\n")) prf->dlpath=strdup(s);
  768.         } else if(strcmp(s,"linktype")==0) {
  769.             if(s=strtok(NULL,"\n")) prf->link=atoi(s);
  770.         } else if(strcmp(s,"optclrlist")==0) {
  771.             prf->clrlist = 1;
  772.         } else if(strcmp(s,"autoconnect")==0) {
  773.             prf->autocon = 1;
  774.         } else if(strcmp(s,"fullpath")==0) {
  775.             prf->fullpath = 1;
  776.         } else if(strcmp(s,"alwaysaskfilename")==0) {
  777.             prf->askfile = 1;
  778.         } else if(strcmp(s,"autoaddshares")==0) {
  779.             prf->autoadd = 1;
  780.         } else if(strcmp(s,"autosaveshares")==0) {
  781.             prf->autosave = 1;
  782.         } else if(strcmp(s,"autocleanupuploads")==0) {
  783.             prf->AutoCleanup = 1;
  784.         } else if(strcmp(s,"lamptype")==0) {
  785.             if(s=strtok(NULL,"\n")) prf->lamps=atoi(s);
  786.         } else if(strcmp(s,"serverlist")==0) {
  787.             if(s=strtok(NULL,"\n")) prf->ServerList=atoi(s);
  788.         } else if(strcmp(s,"namelength")==0) {
  789.             if(s=strtok(NULL,"\n")) {
  790.                 t = atoi(s);
  791.                 if (t > 7 && t < 108) prf->NameLength = t;
  792.             }
  793.         }
  794.     }
  795.     fclose(f);
  796.  
  797.     return TRUE;
  798. }
  799.  
  800.  
  801. void prf_save(char *fname)
  802. {
  803.     FILE *f;
  804.     u_long tmp;
  805.     int i;
  806.  
  807.     f=fopen(fname,"w");
  808.     if(f==0) {
  809.         gui_debug((char *)MSG_ERROR_SAVE);
  810.         return;
  811.     }
  812.  
  813.     GetAttr(MUIA_Menuitem_Checked,gui->iconpanelmenu,&tmp);
  814.     if(tmp==FALSE) fprintf(f,"noiconpanel \n");
  815.  
  816.     /* Advanced */
  817.     if (prf->mainserver) fprintf(f, "mainserver %s\n", prf->mainserver);
  818.     if (prf->server) fprintf(f, "server %s\n", prf->server);
  819. /*
  820.     if (prf->napvers) fprintf(f, "napvers %s\n", prf->napvers);
  821. */
  822.     fprintf(f, "listport %d\n", prf->port);
  823.     fprintf(f, "downloadqueue %d\n", prf->DownloadQueueLimit);
  824.     fprintf(f, "downloadpriority %d\n", prf->DownloadTaskPri);
  825.     fprintf(f, "uploadqueue %d\n", prf->UploadQueueLimit);
  826.     fprintf(f, "uploadpriority %d\n", prf->UploadTaskPri);
  827.     fprintf(f, "queueretries %d\n", prf->QueueRetries);
  828.     fprintf(f, "queuedelay %d\n", prf->QueueDelay);
  829.  
  830.     /* User */
  831.     if(prf->user) fprintf(f,"user %s\n",prf->user);
  832.     if(prf->pass) fprintf(f,"pass %s\n",prf->pass);
  833.     if(prf->email) fprintf(f,"email %s\n",prf->email);
  834.     if(prf->dlpath) fprintf(f,"dlpath %s\n",prf->dlpath);
  835.     fprintf(f,"linktype %d\n",prf->link);
  836.  
  837.     /* Options */
  838.     if(prf->clrlist) fprintf(f,"optclrlist \n");
  839.     if(prf->autocon) fprintf(f,"autoconnect \n");
  840.     if(prf->fullpath) fprintf(f,"fullpath \n");
  841.     if(prf->askfile) fprintf(f,"alwaysaskfilename \n");
  842.     if(prf->autoadd) fprintf(f,"autoaddshares \n");
  843.     if(prf->autosave) fprintf(f,"autosaveshares \n");
  844.     if(prf->AutoCleanup) fprintf(f,"autocleanupuploads \n");
  845.     fprintf(f, "lamptype %d\n", prf->lamps);
  846.     fprintf(f, "serverlist %d\n", prf->ServerList);
  847.     fprintf(f, "namelength %d\n", prf->NameLength);
  848.  
  849.     for(i=0;i<8;i++) {
  850.         if(prf->scripts[i]) fprintf(f, "script %d %s\n", i+1, prf->scripts[i]);
  851.         if(prf->sounds[i]) fprintf(f, "sound %d %s\n", i+1, prf->sounds[i]);
  852.     }
  853.  
  854.     DoMethod(gui->searchpanel, SEARCH_GET);
  855.  
  856.     fprintf(f,"<search> \n");
  857.     fprintf(f,"advopts");
  858.     fprintf(f," %d",prf->speedqual);
  859.     fprintf(f," %d",prf->speedval);
  860.     fprintf(f," %d",prf->bitratequal);
  861.     fprintf(f," %d",prf->bitrateval);
  862.     fprintf(f," %d",prf->freqqual);
  863.     fprintf(f," %d\n",prf->freqval);
  864.     fprintf(f,"max %d\n",prf->max);
  865.     fprintf(f,"</search>\n");
  866.  
  867.     fclose(f);
  868. }
  869.  
  870.  
  871. void prf_entry(struct prfdata *data)
  872. {
  873.     u_long tmp,tmp2;
  874.  
  875.     GetAttr(MUIA_NList_EntryClick, data->EventList, &tmp);
  876.     set(data->EventScriptString, MUIA_Disabled, FALSE);
  877.     set(data->EventSoundString,  MUIA_Disabled, FALSE);
  878.     if (tmp==-1 || tmp==-2) return;
  879.  
  880.     if (data->lastitem != -1) {
  881.         int i = data->lastitem;
  882.         if (prf_eventflags[i]&1) {
  883.             GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
  884.             if (((char*)tmp2)[0]==0) prf->scripts[i]=NULL;
  885.             else prf->scripts[i]=strdup((char*)tmp2);
  886.         }
  887.         if (prf_eventflags[i]&2) {
  888.             GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
  889.             if (((char*)tmp2)[0]==0) prf->sounds[i]=NULL;
  890.             else prf->sounds[i]=strdup((char*)tmp2);
  891.         }
  892.     }
  893.     data->lastitem = tmp;
  894.  
  895.     set(data->EventScriptString, MUIA_String_Contents, prf->scripts[tmp]);
  896.     set(data->EventSoundString,  MUIA_String_Contents, prf->sounds[tmp]);
  897.  
  898.     if (!(prf_eventflags[tmp]&1))
  899.         set(data->EventScriptString, MUIA_Disabled, TRUE);
  900.     if (!(prf_eventflags[tmp]&2))
  901.         set(data->EventSoundString, MUIA_Disabled, TRUE);
  902. }
  903.  
  904.  
  905. void prf_event(int no)
  906. {
  907.     if (prf_eventflags[no]&2 && prf->sounds[no])
  908.         snd_play(prf->sounds[no]);
  909. }
  910.